#include "EstadoJuego.h"

EstadoJuego::EstadoJuego()
{
	mapa				= NULL;
	vista_de_mapa		= NULL;
	jugador				= NULL;
	vista_de_jugador	= NULL;
	controlador			= NULL;
	seguidor_de_jugador	= NULL;
}

EstadoJuego::~EstadoJuego()
{}

void EstadoJuego::Entrar()
{
	/* Inicializando el mapa */
	mapa = new Mapa();
	mapa->Cargar("datos/mapa.map");
	vista_de_mapa = new VistaDeMapa(mapa);
	
	/* Inicializando el jugador */
	Punto pos_ini(10,10);
	jugador = new Entidad(mapa,pos_ini);
	Dimensiones_t dim(50,75);
	vista_de_jugador = new VistaDeEntidad(jugador,dim,3);
	controlador = new ControladorDeJugador(jugador);

	/* Inicializando el objeto que se encarga de que la camara suga al jugador */
	seguidor_de_jugador = new SeguidorDeEntidad(vista_de_mapa);
	seguidor_de_jugador->SeguirA(vista_de_jugador);

	/* Agregar el callback para dibujar */
	callback_dibujar = Callback<EstadoJuego>(this,&EstadoJuego::Dibujar);
	Core::Instancia()->AgregarCallback(&callback_dibujar);
}

void EstadoJuego::Salir()
{	
	/* Eliminando el mapa */
	delete mapa;
	delete vista_de_mapa;
	
	/* Eliminando el jugador */
	delete jugador;
	delete vista_de_jugador;
	delete controlador;
	
	/* Eliminando el seguidor */
	delete seguidor_de_jugador;
	
	/* Eliminar el callback para dibujar */
	Core::Instancia()->EliminarCallback(&callback_dibujar);
}

void EstadoJuego::Dibujar()
{
	Core::Instancia()->Pantalla().Limpiar();
	
	vista_de_mapa->Dibujar(Core::Instancia()->Pantalla().Superficie());
	
	Punto posicion_vista_jugador = Core::Instancia()->Pantalla().Centro();
	posicion_vista_jugador = Punto(posicion_vista_jugador.X()-25,posicion_vista_jugador.Y()-50);
	vista_de_jugador->Dibujar(Core::Instancia()->Pantalla().Superficie(),posicion_vista_jugador);
	
	SDL_Flip(Core::Instancia()->Pantalla().Superficie());
}
